package cn.cloud9.activiti7;

import org.activiti.engine.*;
import org.junit.Test;

/**
 * @author OnCloud9
 * @description
 * @project activiti7
 * @date 2022年08月20日 上午 10:40
 */
public class Activiti7Api {


    /**
     * 1、创建流程引擎时默认会初始化表空间
     */
    @Test
    public void initialTablesAndGetProcessEngine() {
        final ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    }

    /**
     * 2、指定配置文件和Bean名称获取引擎实例
     */
    @Test
    public void otherProcessEngineCreateApi() {
        final ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
        final ProcessEngineConfiguration configuration2 = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml", "PEC");
        System.out.println("configuration == configuration2 = " + (configuration == configuration2));
        final ProcessEngine processEngine = configuration.buildProcessEngine();
    }

    /**
     * 3、获取其他服务实例
     */
    @Test
    public void serviceApi() {
        final ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        /*
          RepositoryService 是activiti的资源管理类，提供了管理和控制流程发布包和流程定义的操作。使用工作流建模工具设计的业务流程图需
          要使用此service将流程定义文件的内容部署到计算机。
          除了部署流程定义以外还可以：查询引擎中的发布包和流程定义。
          //直接使用工具类 ProcessEngines，使用classpath下的activiti.cfg.xml中的配置创建processEngine ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); System.out.println(processEngine); 123 //先构建ProcessEngineConfiguration ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml"); //通过ProcessEngineConfiguration创建ProcessEngine，此时会创建数据库 ProcessEngine processEngine = configuration.buildProcessEngine(); 1234 RuntimeService runtimeService = processEngine.getRuntimeService(); RepositoryService repositoryService = processEngine.getRepositoryService(); TaskService taskService = processEngine.getTaskService(); 123
          暂停或激活发布包，对应全部和特定流程定义。 暂停意味着它们不能再执行任何操作了，激活是对应的反向操作。
          获得多种资源，像是包含在发布包里的文件， 或引擎自动生成的流程图。
          获得流程定义的pojo版本， 可以用来通过java解析流程，而不必通过xml。
         */
        final RepositoryService repositoryService = processEngine.getRepositoryService();
        /*
          Activiti的流程运行管理类。可以从这个服务类中获取很多关于流程执行相关的信息
         */
        final RuntimeService runtimeService = processEngine.getRuntimeService();
        /*
          Activiti的任务管理类。可以从这个类中获取任务的信息
         */
        final TaskService taskService = processEngine.getTaskService();
        /*
          Activiti的历史管理类，可以查询历史信息，执行流程时，引擎会保存很多数据（根据配置），比如流程实例启动时
          间，任务的参与者， 完成任务的时间，每个流程实例的执行路径，等等。 这个服务主要通过查询功能来获得这些数
          据。
         */
        final HistoryService historyService = processEngine.getHistoryService();
        /*
          Activiti的引擎管理类，提供了对 Activiti 流程引擎的管理和维护功能，这些功能不在工作流驱动的应用程序中使用，
          主要用于 Activiti 系统的日常维护。
         */
        final ManagementService managementService = processEngine.getManagementService();
        final DynamicBpmnService dynamicBpmnService = processEngine.getDynamicBpmnService();
    }
}
